#include <stdio.h>
#include <string.h>

#define N 100

int c[N+1][N+1];
char b[N+1][N+1];

void LCS(char* X,char* Y,int m,int n)
{
    int i,j;
    for(i=1;i<=m;i++)
        c[i][0]=0;
    for(j=0;j<=n;j++)
        c[0][j]=0;
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(X[i]==Y[j])
            {
                c[i][j]=c[i-1][j-1]+1;
                b[i][j]=1;
            }
            else
            {
                if(c[i-1][j]>=c[i][j-1])
                {
                    c[i][j]=c[i-1][j];
                    b[i][j]=2;
                }
                else
                {
                    c[i][j]=c[i][j-1];
                    b[i][j]=3;
                }
            }
        }
    }
}

void PRINT_LCS(char* X,int i,int j)
{
    if(i==0 || j==0)
        return;
    if(b[i][j]==1)
    {
        PRINT_LCS(X,i-1,j-1);
        printf("%c ",X[i-1]);
    }
    else if(b[i][j]==2)
        PRINT_LCS(X,i-1,j);
    else
        PRINT_LCS(X,i,j-1);
}

int main()
{
    int i,j;
    char X[N+1];
    char Y[N+1];
    int m,n;
    scanf("%s%s",X,Y);
    m = strlen(X);
    n = strlen(Y);
    LCS(X,Y,m,n);
    printf("LCS长度表c打印出来是这个样子:\n");
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
            printf("%d ",c[i][j]);
        printf("\n");
    }
    printf("路径表b打印出来是这个样子\n");
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
            printf("%d ",b[i][j]);
        printf("\n");
    }
    printf("\nLCS的具体值是：\n");
    PRINT_LCS(X,m,n);
    printf("\n");
    return 0;
}